package com.bestcem.xm.member.dao;

import com.bestcem.xm.member.entity.mongo.SyncRule;
import com.bestcem.xm.member.entity.pojo.SyncRuleDO;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @author ming.xue <ming.xue@idiaoyan.com>
 * @desc 同步规则数据访问
 * @date 2021-08-02
 */
public interface SyncRuleDao {

    /**
     * 获取同步规则
     *
     * @param orgId
     * @param memberType
     * @return
     */
    @Deprecated
    SyncRule get(String orgId, Integer memberType);

    /**
     * 更新同步规则
     */
    @Deprecated
    SyncRule update(SyncRule syncRule);

    /**
     * 根据id获取同步规则
     *
     * @param id
     * @return
     */
    @Deprecated
    SyncRule findById(String id);

    /**
     * 获取同步规则
     *
     * @param orgId 组织标识
     * @param memberType 联系人类型 0-个人联系人 1-机构联系人 2-内部联系人 3-隐藏的 4-项目
     * @return SyncRuleDo 同步规则信息
     */
    SyncRuleDO getByOrderIdAndMemberType(@NotNull String orgId, @NotNull Integer memberType);

    /**
     * 更新同步规则
     *
     * @param syncRuleDo 同步规则信息
     * @return SyncRuleDo 同步规则信息
     */
    SyncRuleDO update(@NotNull SyncRuleDO syncRuleDo);

    /**
     * 创建同步规则
     *
     * @param syncRuleDo 同步规则信息
     */
    void create(@NotNull SyncRuleDO syncRuleDo);

    /**
     * 根据id获取同步规则信息
     *
     * @param syncRuleId 同步规则id
     * @return SyncRuleDo 同步规则信息
     */
    SyncRuleDO findBySyncRuleId(@NotNull String syncRuleId);

    /**
     * 批量更新同步规则信息
     *
     * @param syncRuleDOS 待更新同步规则信息列表
     * @return 更新的结果
     */
    Boolean batchUpdateSyncRule(List<SyncRuleDO> syncRuleDOS);

    /**
     *
     *
     * @param orgIds
     * @param memberType
     * @param syncType
     * @return
     */
    List<String> findByOrgIdsAndMemberTypeAndWechatSyncEnabled(List<String> orgIds, int memberType, int syncType);
}
